﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Npgsql;

namespace Golfvision2020
{

    public partial class Tävlingar : Form
    {
        public List<Tavling> tävlingar = new List<Tavling>();

        public class Tavling
        {
            public string _Id { get; set; }
            public string _Name { get; set; }

            public Tavling(string n, string i)
            {
                _Id = i;
                _Name = n;
            }

            public override string ToString()
            {
                return _Name + " (" + _Id + ")"; 
            }
        }

        public Golfvision Klubben;
        public Tävlingar(Golfvision klubb)
        {
            Klubben = klubb;
            InitializeComponent();
            KlassCombobox.SelectedIndex = 0;
            GetTavlingFromDB();
            if (TävlingCombobox.Items.Count > 0)
                TävlingCombobox.SelectedIndex = 0;
            GetDeltagareFromTävling();

            KollaBehörighet();
        }

        private void KollaBehörighet()
        {
            if (Klubben.Admin == false)
            {
                TaBortDeltagButton.Enabled = false;
                ReggaTävlingButton.Enabled = false;
                ReggaDeltagButton.Enabled = false;
                TävlingListview.Enabled = false;
            }
        }

        // Hämtar alla tävlingar och visar dom i dropdown listan
        public void GetTavlingFromDB()
        {

            tävlingar.Clear();
            TävlingCombobox.DataSource = null;
            //Ett commandobjekt skapas och knyts till ett sql-uttryck och en db-koppling
            NpgsqlCommand command = new NpgsqlCommand("select namn,tavlings_id from tavling", Klubben.conn); 
            NpgsqlDataReader dr = command.ExecuteReader();  //Kommandot körs och resultatet läggs i ett datareader-objekt
            while (dr.Read()) //En loop som rad för rad läser innehållet i datareader'n
            {
                tävlingar.Add(new Tavling(dr["namn"].ToString(), dr["tavlings_id"].ToString()));
            }
            dr.Close();
            TävlingCombobox.ValueMember = "_Id";
            TävlingCombobox.DisplayMember = "_Namn";
            TävlingCombobox.DataSource = tävlingar;
        }

        private void GetDeltagareFromTävling()
        {
            if (TävlingCombobox.SelectedIndex == -1 || KlassCombobox.SelectedIndex == -1)
            {
                return;
            }

            // Rensa listan först
            TävlingListview.Items.Clear();

            String sql = String.Format(
                @"SELECT spelare.golf_id,spelare.first_name,spelare.last_name,spelare.handicap,tavlanden.resultat
                FROM spelare,tavlanden 
                WHERE tavlanden.golf_id=spelare.golf_id 
                AND tavlanden.tavlings_id={0}
                AND tavlanden.klass_id={1};"
                , TävlingCombobox.SelectedValue, KlassCombobox.SelectedIndex);

            NpgsqlCommand command = new NpgsqlCommand(sql, Klubben.conn);
            NpgsqlDataReader dr = command.ExecuteReader();
            while (dr.Read()) //En loop som rad för rad läser innehållet i datareader'n
            {                
                ListViewItem tävlanden = new ListViewItem(dr["golf_id"].ToString());
                tävlanden.SubItems.Add(dr["first_name"].ToString());
                tävlanden.SubItems.Add(dr["last_name"].ToString());
                tävlanden.SubItems.Add(dr["handicap"].ToString());
                tävlanden.SubItems.Add(dr["resultat"].ToString());
                TävlingListview.Items.Add(tävlanden);
            }
            dr.Close();
        }

        private void ReggaTävlingButton_Click(object sender, EventArgs e)
        {
            RegistreraTävling RegistreraTävlingdialog = new RegistreraTävling(this);
            RegistreraTävlingdialog.ShowDialog();
            GetTavlingFromDB();
            TävlingCombobox.SelectedIndex = 0;
        }

        private void ReggaDeltagButton_Click(object sender, EventArgs e)
        {
            Deltagare Deltagaredialog = new Deltagare(this);
            Deltagaredialog.ShowDialog();
            GetDeltagareFromTävling();
        }

        private void TävlingListview_MouseDoubleClick ( object sender, MouseEventArgs e )
        {
           ListViewHitTestInfo hit = TävlingListview.HitTest(e.Location);
           if (hit.Item != null)
           {
               RegistreraResultat Resultatdialog = new RegistreraResultat();
               Resultatdialog.ReggaResultBox.Value = Convert.ToInt32(hit.Item.SubItems[4].Text);
               Resultatdialog.ReggaResultBox.Select();
               Resultatdialog.ReggaResultBox.Select(0, Resultatdialog.ReggaResultBox.Value.ToString().Length);
               Resultatdialog.ShowDialog();
               if (Resultatdialog.Uppdaterad == true &&
                   Resultatdialog.ReggaResultBox.Value != Convert.ToInt32(hit.Item.SubItems[4].Text))
               {
                   // Uppdatera resultatet i databasen
                   String sql = String.Format(
                       @"UPDATE tavlanden
                       SET resultat={0}, senast_uppdaterad='{1}' 
                       WHERE tavlanden.golf_id={2} AND tavlanden.tavlings_id={3};"
                       , Resultatdialog.ReggaResultBox.Value, DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss zzz")
                       , hit.Item.SubItems[0].Text, TävlingCombobox.SelectedValue);

                   NpgsqlCommand command = new NpgsqlCommand(sql, Klubben.conn);
                   if (command.ExecuteNonQuery() != 1)
                   {
                       MessageBox.Show("Kunde inte uppdatera resultat");
                   }
                   GetDeltagareFromTävling();
               }
           }
        }

        private void TopplistorButton_Click(object sender, EventArgs e)
        {
            Topplistor Topplistadialog = new Topplistor(this);
            Topplistadialog.ShowDialog();
        }

        private void KlassCombobox_SelectedIndexChanged(object sender, EventArgs e)
        {
            GetDeltagareFromTävling();
        }

        private void TävlingCombobox_SelectedIndexChanged(object sender, EventArgs e)
        {
            GetDeltagareFromTävling();
        }

        private void TaBortDeltagButton_Click(object sender, EventArgs e)
        {
            if (TävlingListview.SelectedIndices.Count != 1) {
                MessageBox.Show("Du måste markera en deltagare i listan.");
                return;
            }
            String sql = String.Format(
                @"DELETE FROM tavlanden
                WHERE golf_id={0} AND tavlings_id={1};",
                TävlingListview.SelectedItems[0].SubItems[0].Text, TävlingCombobox.SelectedValue);
            NpgsqlCommand command = new NpgsqlCommand(sql, Klubben.conn);
            if (command.ExecuteNonQuery() != 1)
            {
                MessageBox.Show("Kunde inte ta bort deltagaren");
            }
            GetDeltagareFromTävling();
        }

    }
}
